在學習初期,一直搞不懂 Array 與 Hash 的差異在哪裡,到後來學到資料結構的設計方法後,漸漸能夠了解這兩個的特性是什麼,也知道如何做結合運用。
簡單地區分,Array 存取資料的方式是重視順序的,而 Hash 有 key 與 value 的對應關係,所以順序不會影響取值的問題。
languages = ["ruby" , "php" , "Javascript" , "python"]
snack = %w(cake cookie donut candy)
p languages
p snack
# 執行結果
# ["ruby", "php", "Javascript", "python"]
# ["cake", "cookie", "donut", "candy"]
languages = ["ruby" , "php" , "Javascript" , "python"]
puts languages[0]
# 執行結果 ruby
也就是說,通常在取值時,我們習慣說第 1 個值是 ruby,但在 Ruby 這個程式語言的第 0 個值才是取到 ruby 喔!
需要注意的是ruby只有first
、last
而rails還有額外的方法(second
、third
...)可以取值
snack = %w(cake cookie donut candy)
puts snack.last
#執行結果 candy
<<
來把值塞入原有的陣列中brand = ["apple","asus","acer","msi"]
brand << "ph"
p brand
# 執行結果 ["apple", "asus", "acer", "msi", "ph"]
=
來更改原有陣列中的值brand = ["apple","asus","acer","msi"]
brand[1] = "ph"
p brand
# 執行結果 ["apple", "ph", "acer", "msi", "ph"]
類似 Python 中的 Dictionary ; Javascript 中的 Object
不論是 Hash、Dictionary、Object 都有一個 key 和一個 value,稱為「鍵值對」hash = { key1: value1, key2: value2 }
這樣設計的好處是,可以把 key 當作索引值(index)使用,透過索引值,可以用找對應到的 value,所以才說 hash 與 array 不同的地方在於順序問題
product_old = { :name => "apple", :price => 35 }
product_new = { name: "apple", price: 35 }
還記得我昨天最後面提到的symbol適合拿來當作hash的key嗎?
cat = { name:"nancy", age:2, weight:7, kind:mix }
puts cat[:name]
puts cat[:weight]
# 執行結果
# nancy
# 7
所以hash取值的方式,就是用key來當索引值,而這個索引值的資料型態就是symbol!如此一來就可以拿到貓咪的名字和體重啦~
但是有時候hash存放了太多資料,一時之間找不到自己有哪些key可以使用時,那就叫出所有key吧:
p cat.keys
# 執行結果 [:name, :age, :weight, :kind]
看到這裡,你應該也可以猜想到,既然可以取所有的key,想當然也可以取得所有的value囉~
p cat.values
# 執行結果 ["nancy", 2, 7, "mix"]
接下來就來說明昨天欠的「為什麼 hash 的 key 用 symbol 比 string 適合」,明天見~
學無止盡,每天都要進步一點點!